Beautiful Soup
Contents
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.
1 | from bs4 import BeautifulSoup |
简单浏览结构化数据的方法
1 | soup.title |
从文档中找到所有<a>标签的链接:
1 | for link in soup.find_all('a'): |
获取所有文字
1 | print(soup.get_text()) |
安装解析器
可以选择安装第三方HTML解析器lxml
传入文件
1 | soup = BeautifulSoup(open("index.html")) |
对象种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .
tag
1 | # Tag 对象与XML或HTML原生文档中的tag相同: |
tag的属性 name 和attributes
每个tag都有自己的名字,通过 .name 来获取:
1 | tag.name # u'b' |
1 | #一个tag可能有很多个属性(attributes). tag <b class="boldest"> 有一个 “class” 的属性,值为 “boldest” . tag的属性的操作方法与字典相同: |
NavigableString(获取标签内部的内容)
字符串常被包含在tag内.Beautiful Soup用 NavigableString 类来包装tag中的字符串:
1 | tag.string |
BeautifulSoup
BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性来感受一下
Comment
注释对象
遍历文档树
直接子节点(要点:.contents .children 属性)
1 | tag 的 .content 属性可以将tag的子节点以列表的方式输出 |
所有子孙节点 (.descendants)
1 | contents 和 .children 属性仅包含tag的直接子节点,.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似,我们也需要遍历获取其中的内容。 |
节点内容 (.string)
1 | print soup.head.string |
多个内容 (.strings .stripped_strings 属性)
1 | .strings获取多个内容,不过需要遍历获取, |
父节点 ( .parent 属性)
全部父节点 (.parents 属性)
兄弟节点 (.next_sibling .previous_sibling 属性)
全部兄弟节点 (.next_siblings .previous_siblings 属性)
前后节点 (.next_element .previous_element 属性)
搜索文档树
####1)find_all( name , attrs , recursive , text , **kwargs )
find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件
CSS 选择器
写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list
Author: corn1ng
Link: https://corn1ng.github.io/2017/12/05/Beautiful Soup/
License: 知识共享署名-非商业性使用 4.0 国际许可协议